package com.ly.honor.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;

import java.util.concurrent.Executor;

/**
 * @Author LiYang
 * @Date 2022/11/17 18:47
 * @Version 1.0
 */
@Configuration
@EnableAsync // 启用异步任务
public class AsyncConfig {

    // 声明一个线程池，并指定名字
    @Bean("taskExecutor")
    public Executor asyncExecutor(){
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        // 核心线程数5： 线程池创建的时候初始化线程数量
        executor.setCorePoolSize(5);
        // 最大线程数5： 线程池最大线程数，只有在缓冲队列已满的情况下才会申请超过核心线程数的的线程
        executor.setMaxPoolSize(5);
        // 缓冲队列100： 用来缓冲执行任务的队列
        executor.setQueueCapacity(100);
        // 允许线程的空闲时间为120秒： 超过核心线程数的线程会在空闲120秒后自动销毁
        executor.setKeepAliveSeconds(120);
        // 线程池名称前缀： 设置好后方便我们进行定位处理任务所在的线程池
        executor.setThreadNamePrefix("PusherAsync-");
        // 初始化线程池
        executor.initialize();
        return executor;
    }


}
